home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / libcruft / minpack / hybrd.f < prev    next >
Text File  |  1996-07-19  |  15KB  |  460 lines

  1.       SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG,
  2.      *                 MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC,R,LR,
  3.      *                 QTF,WA1,WA2,WA3,WA4)
  4.       INTEGER N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR
  5.       DOUBLE PRECISION XTOL,EPSFCN,FACTOR
  6.       DOUBLE PRECISION X(N),FVEC(N),DIAG(N),FJAC(LDFJAC,N),R(LR),
  7.      *                 QTF(N),WA1(N),WA2(N),WA3(N),WA4(N)
  8.       EXTERNAL FCN
  9. C     **********
  10. C
  11. C     SUBROUTINE HYBRD
  12. C
  13. C     THE PURPOSE OF HYBRD IS TO FIND A ZERO OF A SYSTEM OF
  14. C     N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION
  15. C     OF THE POWELL HYBRID METHOD. THE USER MUST PROVIDE A
  16. C     SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS
  17. C     THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION.
  18. C
  19. C     THE SUBROUTINE STATEMENT IS
  20. C
  21. C       SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,
  22. C                        DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,
  23. C                        LDFJAC,R,LR,QTF,WA1,WA2,WA3,WA4)
  24. C
  25. C     WHERE
  26. C
  27. C       FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH
  28. C         CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED
  29. C         IN AN EXTERNAL STATEMENT IN THE USER CALLING
  30. C         PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS.
  31. C
  32. C         SUBROUTINE FCN(N,X,FVEC,IFLAG)
  33. C         INTEGER N,IFLAG
  34. C         DOUBLE PRECISION X(N),FVEC(N)
  35. C         ----------
  36. C         CALCULATE THE FUNCTIONS AT X AND
  37. C         RETURN THIS VECTOR IN FVEC.
  38. C         ---------
  39. C         RETURN
  40. C         END
  41. C
  42. C         THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS
  43. C         THE USER WANTS TO TERMINATE EXECUTION OF HYBRD.
  44. C         IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER.
  45. C
  46. C       N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER
  47. C         OF FUNCTIONS AND VARIABLES.
  48. C
  49. C       X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN
  50. C         AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X
  51. C         CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR.
  52. C
  53. C       FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS
  54. C         THE FUNCTIONS EVALUATED AT THE OUTPUT X.
  55. C
  56. C       XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION
  57. C         OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE
  58. C         ITERATES IS AT MOST XTOL.
  59. C
  60. C       MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION
  61. C         OCCURS WHEN THE NUMBER OF CALLS TO FCN IS AT LEAST MAXFEV
  62. C         BY THE END OF AN ITERATION.
  63. C
  64. C       ML IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES
  65. C         THE NUMBER OF SUBDIAGONALS WITHIN THE BAND OF THE
  66. C         JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET
  67. C         ML TO AT LEAST N - 1.
  68. C
  69. C       MU IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES
  70. C         THE NUMBER OF SUPERDIAGONALS WITHIN THE BAND OF THE
  71. C         JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET
  72. C         MU TO AT LEAST N - 1.
  73. C
  74. C       EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE
  75. C         STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS
  76. C         APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE
  77. C         FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS
  78. C         THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE
  79. C         ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE
  80. C         PRECISION.
  81. C
  82. C       DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE
  83. C         BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG
  84. C         MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS IMPLICIT
  85. C         (MULTIPLICATIVE) SCALE FACTORS FOR THE VARIABLES.
  86. C
  87. C       MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE
  88. C         VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2,
  89. C         THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER
  90. C         VALUES OF MODE ARE EQUIVALENT TO MODE = 1.
  91. C
  92. C       FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE
  93. C         INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF
  94. C         FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE
  95. C         TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE
  96. C         INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE.
  97. C
  98. C       NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED
  99. C         PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE,
  100. C         FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST
  101. C         ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND
  102. C         IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE
  103. C         FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS
  104. C         OF FCN WITH IFLAG = 0 ARE MADE.
  105. C
  106. C       INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS
  107. C         TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE)
  108. C         VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE,
  109. C         INFO IS SET AS FOLLOWS.
  110. C
  111. C         INFO = 0   IMPROPER INPUT PARAMETERS.
  112. C
  113. C         INFO = 1   RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES
  114. C                    IS AT MOST TOL.
  115. C
  116. C         INFO = 2   NUMBER OF CALLS TO FCN HAS REACHED OR EXCEEDED
  117. C                    MAXFEV.
  118. C
  119. C         INFO = 3   XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN
  120. C                    THE APPROXIMATE SOLUTION X IS POSSIBLE.
  121. C
  122. C         INFO = 4   ITERATION IS NOT MAKING GOOD PROGRESS, AS
  123. C                    MEASURED BY THE IMPROVEMENT FROM THE LAST
  124. C                    FIVE JACOBIAN EVALUATIONS.
  125. C
  126. C         INFO = 5   ITERATION IS NOT MAKING GOOD PROGRESS, AS
  127. C                    MEASURED BY THE IMPROVEMENT FROM THE LAST
  128. C                    TEN ITERATIONS.
  129. C
  130. C       NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF
  131. C         CALLS TO FCN.
  132. C
  133. C       FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE
  134. C         ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION
  135. C         OF THE FINAL APPROXIMATE JACOBIAN.
  136. C
  137. C       LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N
  138. C         WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC.
  139. C
  140. C       R IS AN OUTPUT ARRAY OF LENGTH LR WHICH CONTAINS THE
  141. C         UPPER TRIANGULAR MATRIX PRODUCED BY THE QR FACTORIZATION
  142. C         OF THE FINAL APPROXIMATE JACOBIAN, STORED ROWWISE.
  143. C
  144. C       LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN
  145. C         (N*(N+1))/2.
  146. C
  147. C       QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS
  148. C         THE VECTOR (Q TRANSPOSE)*FVEC.
  149. C
  150. C       WA1, WA2, WA3, AND WA4 ARE WORK ARRAYS OF LENGTH N.
  151. C
  152. C     SUBPROGRAMS CALLED
  153. C
  154. C       USER-SUPPLIED ...... FCN
  155. C
  156. C       MINPACK-SUPPLIED ... DOGLEG,DPMPAR,ENORM,FDJAC1,
  157. C                            QFORM,QRFAC,R1MPYQ,R1UPDT
  158. C
  159. C       FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,MIN0,MOD
  160. C
  161. C     MINPACK. VERSION OF SEPTEMBER 1979.
  162. C     BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE
  163. C
  164. C     **********
  165.       INTEGER I,IFLAG,ITER,J,JM1,L,MSUM,NCFAIL,NCSUC,NSLOW1,NSLOW2
  166.       INTEGER IWA(1)
  167.       LOGICAL JEVAL,SING
  168.       DOUBLE PRECISION ACTRED,DELTA,EPSMCH,FNORM,FNORM1,ONE,PNORM,
  169.      *                 PRERED,P1,P5,P001,P0001,RATIO,SUM,TEMP,XNORM,
  170.      *                 ZERO
  171.       DOUBLE PRECISION DPMPAR,ENORM
  172.       DATA ONE,P1,P5,P001,P0001,ZERO
  173.      *     /1.0D0,1.0D-1,5.0D-1,1.0D-3,1.0D-4,0.0D0/
  174. C
  175. C     EPSMCH IS THE MACHINE PRECISION.
  176. C
  177.       EPSMCH = DPMPAR(1)
  178. C
  179.       INFO = 0
  180.       IFLAG = 0
  181.       NFEV = 0
  182. C
  183. C     CHECK THE INPUT PARAMETERS FOR ERRORS.
  184. C
  185.       IF (N .LE. 0 .OR. XTOL .LT. ZERO .OR. MAXFEV .LE. 0
  186.      *    .OR. ML .LT. 0 .OR. MU .LT. 0 .OR. FACTOR .LE. ZERO
  187.      *    .OR. LDFJAC .LT. N .OR. LR .LT. (N*(N + 1))/2) GO TO 300
  188.       IF (MODE .NE. 2) GO TO 20
  189.       DO 10 J = 1, N
  190.          IF (DIAG(J) .LE. ZERO) GO TO 300
  191.    10    CONTINUE
  192.    20 CONTINUE
  193. C
  194. C     EVALUATE THE FUNCTION AT THE STARTING POINT
  195. C     AND CALCULATE ITS NORM.
  196. C
  197.       IFLAG = 1
  198.       CALL FCN(N,X,FVEC,IFLAG)
  199.       NFEV = 1
  200.       IF (IFLAG .LT. 0) GO TO 300
  201.       FNORM = ENORM(N,FVEC)
  202. C
  203. C     DETERMINE THE NUMBER OF CALLS TO FCN NEEDED TO COMPUTE
  204. C     THE JACOBIAN MATRIX.
  205. C
  206.       MSUM = MIN0(ML+MU+1,N)
  207. C
  208. C     INITIALIZE ITERATION COUNTER AND MONITORS.
  209. C
  210.       ITER = 1
  211.       NCSUC = 0
  212.       NCFAIL = 0
  213.       NSLOW1 = 0
  214.       NSLOW2 = 0
  215. C
  216. C     BEGINNING OF THE OUTER LOOP.
  217. C
  218.    30 CONTINUE
  219.          JEVAL = .TRUE.
  220. C
  221. C        CALCULATE THE JACOBIAN MATRIX.
  222. C
  223.          IFLAG = 2
  224.          CALL FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN,WA1,
  225.      *               WA2)
  226.          NFEV = NFEV + MSUM
  227.          IF (IFLAG .LT. 0) GO TO 300
  228. C
  229. C        COMPUTE THE QR FACTORIZATION OF THE JACOBIAN.
  230. C
  231.          CALL QRFAC(N,N,FJAC,LDFJAC,.FALSE.,IWA,1,WA1,WA2,WA3)
  232. C
  233. C        ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING
  234. C        TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN.
  235. C
  236.          IF (ITER .NE. 1) GO TO 70
  237.          IF (MODE .EQ. 2) GO TO 50
  238.          DO 40 J = 1, N
  239.             DIAG(J) = WA2(J)
  240.             IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE
  241.    40       CONTINUE
  242.    50    CONTINUE
  243. C
  244. C        ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X
  245. C        AND INITIALIZE THE STEP BOUND DELTA.
  246. C
  247.          DO 60 J = 1, N
  248.             WA3(J) = DIAG(J)*X(J)
  249.    60       CONTINUE
  250.          XNORM = ENORM(N,WA3)
  251.          DELTA = FACTOR*XNORM
  252.          IF (DELTA .EQ. ZERO) DELTA = FACTOR
  253.    70    CONTINUE
  254. C
  255. C        FORM (Q TRANSPOSE)*FVEC AND STORE IN QTF.
  256. C
  257.          DO 80 I = 1, N
  258.             QTF(I) = FVEC(I)
  259.    80       CONTINUE
  260.          DO 120 J = 1, N
  261.             IF (FJAC(J,J) .EQ. ZERO) GO TO 110
  262.             SUM = ZERO
  263.             DO 90 I = J, N
  264.                SUM = SUM + FJAC(I,J)*QTF(I)
  265.    90          CONTINUE
  266.             TEMP = -SUM/FJAC(J,J)
  267.             DO 100 I = J, N
  268.                QTF(I) = QTF(I) + FJAC(I,J)*TEMP
  269.   100          CONTINUE
  270.   110       CONTINUE
  271.   120       CONTINUE
  272. C
  273. C        COPY THE TRIANGULAR FACTOR OF THE QR FACTORIZATION INTO R.
  274. C
  275.          SING = .FALSE.
  276.          DO 150 J = 1, N
  277.             L = J
  278.             JM1 = J - 1
  279.             IF (JM1 .LT. 1) GO TO 140
  280.             DO 130 I = 1, JM1
  281.                R(L) = FJAC(I,J)
  282.                L = L + N - I
  283.   130          CONTINUE
  284.   140       CONTINUE
  285.             R(L) = WA1(J)
  286.             IF (WA1(J) .EQ. ZERO) SING = .TRUE.
  287.   150       CONTINUE
  288. C
  289. C        ACCUMULATE THE ORTHOGONAL FACTOR IN FJAC.
  290. C
  291.          CALL QFORM(N,N,FJAC,LDFJAC,WA1)
  292. C
  293. C        RESCALE IF NECESSARY.
  294. C
  295.          IF (MODE .EQ. 2) GO TO 170
  296.          DO 160 J = 1, N
  297.             DIAG(J) = DMAX1(DIAG(J),WA2(J))
  298.   160       CONTINUE
  299.   170    CONTINUE
  300. C
  301. C        BEGINNING OF THE INNER LOOP.
  302. C
  303.   180    CONTINUE
  304. C
  305. C           IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES.
  306. C
  307.             IF (NPRINT .LE. 0) GO TO 190
  308.             IFLAG = 0
  309.             IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(N,X,FVEC,IFLAG)
  310.             IF (IFLAG .LT. 0) GO TO 300
  311.   190       CONTINUE
  312. C
  313. C           DETERMINE THE DIRECTION P.
  314. C
  315.             CALL DOGLEG(N,R,LR,DIAG,QTF,DELTA,WA1,WA2,WA3)
  316. C
  317. C           STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P.
  318. C
  319.             DO 200 J = 1, N
  320.                WA1(J) = -WA1(J)
  321.                WA2(J) = X(J) + WA1(J)
  322.                WA3(J) = DIAG(J)*WA1(J)
  323.   200          CONTINUE
  324.             PNORM = ENORM(N,WA3)
  325. C
  326. C           ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND.
  327. C
  328.             IF (ITER .EQ. 1) DELTA = DMIN1(DELTA,PNORM)
  329. C
  330. C           EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM.
  331. C
  332.             IFLAG = 1
  333.             CALL FCN(N,WA2,WA4,IFLAG)
  334.             NFEV = NFEV + 1
  335.             IF (IFLAG .LT. 0) GO TO 300
  336.             FNORM1 = ENORM(N,WA4)
  337. C
  338. C           COMPUTE THE SCALED ACTUAL REDUCTION.
  339. C
  340.             ACTRED = -ONE
  341.             IF (FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2
  342. C
  343. C           COMPUTE THE SCALED PREDICTED REDUCTION.
  344. C
  345.             L = 1
  346.             DO 220 I = 1, N
  347.                SUM = ZERO
  348.                DO 210 J = I, N
  349.                   SUM = SUM + R(L)*WA1(J)
  350.                   L = L + 1
  351.   210             CONTINUE
  352.                WA3(I) = QTF(I) + SUM
  353.   220          CONTINUE
  354.             TEMP = ENORM(N,WA3)
  355.             PRERED = ZERO
  356.             IF (TEMP .LT. FNORM) PRERED = ONE - (TEMP/FNORM)**2
  357. C
  358. C           COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED
  359. C           REDUCTION.
  360. C
  361.             RATIO = ZERO
  362.             IF (PRERED .GT. ZERO) RATIO = ACTRED/PRERED
  363. C
  364. C           UPDATE THE STEP BOUND.
  365. C
  366.             IF (RATIO .GE. P1) GO TO 230
  367.                NCSUC = 0
  368.                NCFAIL = NCFAIL + 1
  369.                DELTA = P5*DELTA
  370.                GO TO 240
  371.   230       CONTINUE
  372.                NCFAIL = 0
  373.                NCSUC = NCSUC + 1
  374.                IF (RATIO .GE. P5 .OR. NCSUC .GT. 1)
  375.      *            DELTA = DMAX1(DELTA,PNORM/P5)
  376.                IF (DABS(RATIO-ONE) .LE. P1) DELTA = PNORM/P5
  377.   240       CONTINUE
  378. C
  379. C           TEST FOR SUCCESSFUL ITERATION.
  380. C
  381.             IF (RATIO .LT. P0001) GO TO 260
  382. C
  383. C           SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS.
  384. C
  385.             DO 250 J = 1, N
  386.                X(J) = WA2(J)
  387.                WA2(J) = DIAG(J)*X(J)
  388.                FVEC(J) = WA4(J)
  389.   250          CONTINUE
  390.             XNORM = ENORM(N,WA2)
  391.             FNORM = FNORM1
  392.             ITER = ITER + 1
  393.   260       CONTINUE
  394. C
  395. C           DETERMINE THE PROGRESS OF THE ITERATION.
  396. C
  397.             NSLOW1 = NSLOW1 + 1
  398.             IF (ACTRED .GE. P001) NSLOW1 = 0
  399.             IF (JEVAL) NSLOW2 = NSLOW2 + 1
  400.             IF (ACTRED .GE. P1) NSLOW2 = 0
  401. C
  402. C           TEST FOR CONVERGENCE.
  403. C
  404.             IF (DELTA .LE. XTOL*XNORM .OR. FNORM .EQ. ZERO) INFO = 1
  405.             IF (INFO .NE. 0) GO TO 300
  406. C
  407. C           TESTS FOR TERMINATION AND STRINGENT TOLERANCES.
  408. C
  409.             IF (NFEV .GE. MAXFEV) INFO = 2
  410.             IF (P1*DMAX1(P1*DELTA,PNORM) .LE. EPSMCH*XNORM) INFO = 3
  411.             IF (NSLOW2 .EQ. 5) INFO = 4
  412.             IF (NSLOW1 .EQ. 10) INFO = 5
  413.             IF (INFO .NE. 0) GO TO 300
  414. C
  415. C           CRITERION FOR RECALCULATING JACOBIAN APPROXIMATION
  416. C           BY FORWARD DIFFERENCES.
  417. C
  418.             IF (NCFAIL .EQ. 2) GO TO 290
  419. C
  420. C           CALCULATE THE RANK ONE MODIFICATION TO THE JACOBIAN
  421. C           AND UPDATE QTF IF NECESSARY.
  422. C
  423.             DO 280 J = 1, N
  424.                SUM = ZERO
  425.                DO 270 I = 1, N
  426.                   SUM = SUM + FJAC(I,J)*WA4(I)
  427.   270             CONTINUE
  428.                WA2(J) = (SUM - WA3(J))/PNORM
  429.                WA1(J) = DIAG(J)*((DIAG(J)*WA1(J))/PNORM)
  430.                IF (RATIO .GE. P0001) QTF(J) = SUM
  431.   280          CONTINUE
  432. C
  433. C           COMPUTE THE QR FACTORIZATION OF THE UPDATED JACOBIAN.
  434. C
  435.             CALL R1UPDT(N,N,R,LR,WA1,WA2,WA3,SING)
  436.             CALL R1MPYQ(N,N,FJAC,LDFJAC,WA2,WA3)
  437.             CALL R1MPYQ(1,N,QTF,1,WA2,WA3)
  438. C
  439. C           END OF THE INNER LOOP.
  440. C
  441.             JEVAL = .FALSE.
  442.             GO TO 180
  443.   290    CONTINUE
  444. C
  445. C        END OF THE OUTER LOOP.
  446. C
  447.          GO TO 30
  448.   300 CONTINUE
  449. C
  450. C     TERMINATION, EITHER NORMAL OR USER IMPOSED.
  451. C
  452.       IF (IFLAG .LT. 0) INFO = IFLAG
  453.       IFLAG = 0
  454.       IF (NPRINT .GT. 0) CALL FCN(N,X,FVEC,IFLAG)
  455.       RETURN
  456. C
  457. C     LAST CARD OF SUBROUTINE HYBRD.
  458. C
  459.       END
  460.